package repositorios;

import excessoes.DAOException;
import interfaces.InterfaceTramitacaoAnexoDAO;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.hibernate.exception.ConstraintViolationException;
import entidades.TramitacaoAnexo;

/**
 *
 * @author Marcelo Neto
 */
public class TramitacaoAnexoDAOHibernate implements InterfaceTramitacaoAnexoDAO 
{
    private Session session;

    public void setSessao(Session session) {
        this.session = session;
    }

    @Override
    public TramitacaoAnexo carregarTramitacaoAnexo(Integer id) {
        return (TramitacaoAnexo) this.session.get(TramitacaoAnexo.class, id);
    }

    @Override
    public void salvarTramitacaoAnexo(TramitacaoAnexo tramitacaoAnexo) throws DAOException 
    {
        try {
           this.session.saveOrUpdate(tramitacaoAnexo);
        }
        catch (ConstraintViolationException e) {
            throw new DAOException("Erro de chave duplicada\n" + e.getConstraintName());
        }
    }

    @Override
    @SuppressWarnings("unchecked")
    public List<TramitacaoAnexo> listarTramitacaoAnexo() 
    {
        Criteria criteria = this.session.createCriteria(TramitacaoAnexo.class);
        criteria.addOrder((Order.desc("idprocesso")));
        return criteria.list();
    }
    
    @Override
    @SuppressWarnings("unchecked")
    public List<TramitacaoAnexo> listarTramitacaoAnexoPorSetor(Integer localProcesso)
    {
        Criteria criteria = session.createCriteria(TramitacaoAnexo.class);
        criteria.createAlias("processo", "p");
        criteria.add(Restrictions.eq("p.status", 1));
        criteria.add(Restrictions.eq("localProcesso", localProcesso));
        criteria.addOrder((Order.desc("dataTramitacao")));
        return criteria.list();
    }
    
    @Override
    @SuppressWarnings("unchecked")
    public List<TramitacaoAnexo> listarTramitacaoPorAnexo(Integer idvolume)
    {
        Criteria criteria = session.createCriteria(TramitacaoAnexo.class);
        criteria.add(Restrictions.eq("idanexo", idvolume));
        criteria.addOrder((Order.desc("idtramitaAnexo")));
        return criteria.list();
    }
}